<?php

/**
 * Created by PhpStorm.
 * User: YUWENXUAN
 * Date: 2017/4/14
 * Time: 15:41
 */

//例如某个抽象方法被声明为受保护的，那么子类中实现的方法就应该声明为受保护的或者公有的，而不能定义为私有的。

abstract class AbstractClass
{
    abstract protected function getValue();

    abstract public function pubfix($pubfix);
//    abstract private function prefix($prefix);  // 抽象类不能定义私有方法


//    普通方法
    public function printOut()
    {
        print $this->getValue().PHP_EOL;
    }

}

class ConcreteClass extends AbstractClass
{
    public $aa;
    public function __construct($aa)
    {
        $this->aa=$aa;
    }

    protected function getValue()
    {
        // TODO: Implement getValue() method.
        return "ConcreteClass".PHP_EOL;
    }

    public function pubfix($pubfix)
    {
        // TODO: Implement pubfix() method.
        return "{$pubfix}ConcreteClass  hello".PHP_EOL;
    }

    private function prefix()
    {

    }

    function __toString()
    {
//        $fileContent = "";

        // TODO: Implement __toString() method.
        return __CLASS__;  //打印出class名字
    }
}

$class1 = new ConcreteClass('ll');
//$class2 = new ConcreteClass;

//echo $class1.PHP_EOL;
//echo $class2.PHP_EOL;
echo $class1->printOut();
echo $class1->pubfix('Foo_');

// 当class没有参数的时候$class2 = new ConcreteClass    $class1 = new ConcreteClass()是一样的，当有参数的时候，一定加()给它传参。



